iT邦幫忙

2025 iThome 鐵人賽

DAY 6
1

昨天我們學了方法,知道怎麼避免重複程式碼。
今天我們要更進一步,開始進入 OOP(物件導向程式設計) 的世界。


Class 與 Object

可以這樣簡單理解類別(Class)和物件(Object)的差異:

類別(Class)

  • 定義:類別是程式碼中的一種「藍圖」或「設計圖」,描述了某種事物應該有哪些屬性(資料)和方法(行為)。
  • 存在位置:類別本身通常寫在程式檔案中,存在於硬碟或程式碼庫裡。
  • 作用:類別本身不會直接佔用執行時的記憶體,它只是一種結構描述,用來告訴程式「如果我要建立這種東西,它應該長什麼樣子」。

物件(Object)

  • 定義:物件是類別被「實例化」(Instantiate)之後產生的實體,會根據類別的藍圖在記憶體中開出一塊空間。
  • 存在位置:物件在程式執行時,才會真的被建立並放到記憶體中。
  • 作用:物件能夠保存資料(欄位/屬性的值),也能夠呼叫類別中定義的方法來執行操作。

簡單比喻

  • 類別就像房子的設計圖:畫在紙上的設計,不會佔用土地。
  • 物件就像依照設計圖蓋出來的房子:蓋好後才真的存在,而且可以住人、使用。

三大特性(簡單版)

  1. 封裝 (Encapsulation)
    把資料與邏輯包起來,避免外部亂改。

    public class Account
    {
        private decimal _balance;
        public void Deposit(decimal amount) { _balance += amount; }
        public decimal GetBalance() { return _balance; }
    }
    
  2. 繼承 (Inheritance)
    子類別可以擴充父類別功能。

    public class Stock
    {
        public string Symbol { get; set; }
        public decimal Price { get; set; }
    }
    
    public class StockProfile : Stock
    {
        public string Industry { get; set; }
    }
    
  3. 多型 (Polymorphism)
    相同方法,不同實作。

    public abstract class TaxCalculator
    {
        public abstract decimal Calc(decimal amount);
    }
    
    public class TwTax : TaxCalculator
    {
        public override decimal Calc(decimal amount) { return amount * 0.003m; }
    }
    

修飾詞 (Access Modifiers)

控制類別或成員誰能用:

  • public:任何地方都能存取
  • private:只能在類別內部
  • protected:子類別也能用
  • internal:同專案能用

不用 OOP 的痛苦

string symbol1 = "2330"; decimal price1 = 1265m; int volume1 = 1000;
string symbol2 = "2303"; decimal price2 = 45.7m;  int volume2 = 200;

decimal amount1 = price1 * volume1;
decimal amount2 = price2 * volume2;

Console.WriteLine($"{symbol1} 成交金額 {amount1}");
Console.WriteLine($"{symbol2} 成交金額 {amount2}");

👉 資料分散,邏輯重複,不好維護。


OOP 改善後

class Program
{
    static void Main()
    {
        var s1 = new Stock("2330", 1265m, 1000);
        var s2 = new Stock("2303", 45.7m, 200);

        Console.WriteLine($"{s1.Symbol} 成交金額 {s1.Amount()}");
        Console.WriteLine($"{s2.Symbol} 成交金額 {s2.Amount()}");
    }
}

👉 清楚、好維護,還能持續擴充。


小結

今天我們學會了:

  • 類別與物件:設計圖 + 實體
  • 三大特性:封裝、繼承、多型
  • 修飾詞:控制誰能存取
  • OOP 的好處:程式更乾淨、更容易維護


上一篇
Day 5 - 方法 (Method) 與程式邏輯封裝
下一篇
Day 7 - 繼承、介面與 DI/IoC 初探
系列文
30天快速上手製作WPF選股工具 — 從C#基礎到LiteDB與Web API整合21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言